package tsoptions

import (
	"slices"

	"github.com/microsoft/typescript-go/internal/compiler/diagnostics"
	"github.com/microsoft/typescript-go/internal/core"
)

var OptionsDeclarations = slices.Concat(commonOptionsWithBuild, optionsForCompiler)

var optionsForCompiler = []*CommandLineOption{
	//******* commandOptionsWithoutBuild *******
	{
		Name:                     "help",
		shortName:                "h",
		Kind:                     CommandLineOptionTypeBoolean,
		showInSimplifiedHelpView: true,
		IsCommandLineOnly:        true,
		Category:                 diagnostics.Command_line_Options,
		Description:              diagnostics.Print_this_message,
		DefaultValueDescription:  false,
	},
	{
		Name:                    "help",
		shortName:               "?",
		Kind:                    CommandLineOptionTypeBoolean,
		IsCommandLineOnly:       true,
		Category:                diagnostics.Command_line_Options,
		DefaultValueDescription: false,
	},
	{
		Name:                     "watch",
		shortName:                "w",
		Kind:                     CommandLineOptionTypeBoolean,
		showInSimplifiedHelpView: true,
		IsCommandLineOnly:        true,
		Category:                 diagnostics.Command_line_Options,
		Description:              diagnostics.Watch_input_files,
		DefaultValueDescription:  false,
	},
	{
		Name:                     "preserveWatchOutput",
		Kind:                     CommandLineOptionTypeBoolean,
		showInSimplifiedHelpView: false,
		Category:                 diagnostics.Output_Formatting,
		Description:              diagnostics.Disable_wiping_the_console_in_watch_mode,
		DefaultValueDescription:  false,
	},
	{
		Name:                    "listFiles",
		Kind:                    CommandLineOptionTypeBoolean,
		Category:                diagnostics.Compiler_Diagnostics,
		Description:             diagnostics.Print_all_of_the_files_read_during_the_compilation,
		DefaultValueDescription: false,
	},
	{
		Name:                    "explainFiles",
		Kind:                    CommandLineOptionTypeBoolean,
		Category:                diagnostics.Compiler_Diagnostics,
		Description:             diagnostics.Print_files_read_during_the_compilation_including_why_it_was_included,
		DefaultValueDescription: false,
	},
	{
		Name:                    "listEmittedFiles",
		Kind:                    CommandLineOptionTypeBoolean,
		Category:                diagnostics.Compiler_Diagnostics,
		Description:             diagnostics.Print_the_names_of_emitted_files_after_a_compilation,
		DefaultValueDescription: false,
	},
	{
		Name:                     "pretty",
		Kind:                     CommandLineOptionTypeBoolean,
		showInSimplifiedHelpView: true,
		Category:                 diagnostics.Output_Formatting,
		Description:              diagnostics.Enable_color_and_formatting_in_TypeScript_s_output_to_make_compiler_errors_easier_to_read,
		DefaultValueDescription:  true,
	},
	{
		Name:                    "traceResolution",
		Kind:                    CommandLineOptionTypeBoolean,
		Category:                diagnostics.Compiler_Diagnostics,
		Description:             diagnostics.Log_paths_used_during_the_moduleResolution_process,
		DefaultValueDescription: false,
	},
	{
		Name:                    "diagnostics",
		Kind:                    CommandLineOptionTypeBoolean,
		Category:                diagnostics.Compiler_Diagnostics,
		Description:             diagnostics.Output_compiler_performance_information_after_building,
		DefaultValueDescription: false,
	},
	{
		Name:                    "extendedDiagnostics",
		Kind:                    CommandLineOptionTypeBoolean,
		Category:                diagnostics.Compiler_Diagnostics,
		Description:             diagnostics.Output_more_detailed_compiler_performance_information_after_building,
		DefaultValueDescription: false,
	},
	{
		Name:                    "generateCpuProfile",
		Kind:                    CommandLineOptionTypeString,
		isFilePath:              true,
		Category:                diagnostics.Compiler_Diagnostics,
		Description:             diagnostics.Emit_a_v8_CPU_profile_of_the_compiler_run_for_debugging,
		DefaultValueDescription: "profile.cpuprofile",
	},
	{
		Name:        "generateTrace",
		Kind:        CommandLineOptionTypeString,
		isFilePath:  true,
		Category:    diagnostics.Compiler_Diagnostics,
		Description: diagnostics.Generates_an_event_trace_and_a_list_of_types,
	},
	{
		Name:                    "incremental",
		shortName:               "i",
		Kind:                    CommandLineOptionTypeBoolean,
		Category:                diagnostics.Projects,
		Description:             diagnostics.Save_tsbuildinfo_files_to_allow_for_incremental_compilation_of_projects,
		transpileOptionValue:    core.TSUnknown,
		DefaultValueDescription: diagnostics.X_false_unless_composite_is_set,
	},
	{
		Name:      "declaration",
		shortName: "d",
		Kind:      CommandLineOptionTypeBoolean,
		// Not setting affectsEmit because we calculate this flag might not affect full emit
		AffectsBuildInfo:         true,
		showInSimplifiedHelpView: true,
		Category:                 diagnostics.Emit,
		transpileOptionValue:     core.TSUnknown,
		Description:              diagnostics.Generate_d_ts_files_from_TypeScript_and_JavaScript_files_in_your_project,
		DefaultValueDescription:  diagnostics.X_false_unless_composite_is_set,
	},
	{
		Name: "declarationMap",
		Kind: CommandLineOptionTypeBoolean,
		// Not setting affectsEmit because we calculate this flag might not affect full emit
		AffectsBuildInfo:         true,
		showInSimplifiedHelpView: true,
		Category:                 diagnostics.Emit,
		DefaultValueDescription:  false,
		Description:              diagnostics.Create_sourcemaps_for_d_ts_files,
	},
	{
		Name: "emitDeclarationOnly",
		Kind: CommandLineOptionTypeBoolean,
		// Not setting affectsEmit because we calculate this flag might not affect full emit
		AffectsBuildInfo:         true,
		showInSimplifiedHelpView: true,
		Category:                 diagnostics.Emit,
		Description:              diagnostics.Only_output_d_ts_files_and_not_JavaScript_files,
		transpileOptionValue:     core.TSUnknown,
		DefaultValueDescription:  false,
	},
	{
		Name: "sourceMap",
		Kind: CommandLineOptionTypeBoolean,
		// Not setting affectsEmit because we calculate this flag might not affect full emit
		AffectsBuildInfo:         true,
		showInSimplifiedHelpView: true,
		Category:                 diagnostics.Emit,
		DefaultValueDescription:  false,
		Description:              diagnostics.Create_source_map_files_for_emitted_JavaScript_files,
	},
	{
		Name: "inlineSourceMap",
		Kind: CommandLineOptionTypeBoolean,
		// Not setting affectsEmit because we calculate this flag might not affect full emit
		AffectsBuildInfo:        true,
		Category:                diagnostics.Emit,
		Description:             diagnostics.Include_sourcemap_files_inside_the_emitted_JavaScript,
		DefaultValueDescription: false,
	},
	{
		Name:                     "noCheck",
		Kind:                     CommandLineOptionTypeBoolean,
		showInSimplifiedHelpView: false,
		Category:                 diagnostics.Compiler_Diagnostics,
		Description:              diagnostics.Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported,
		transpileOptionValue:     core.TSTrue,
		DefaultValueDescription:  false,
		// Not setting affectsSemanticDiagnostics or affectsBuildInfo because we dont want all diagnostics to go away, its handled in builder
	},
	{
		Name:                     "noEmit",
		Kind:                     CommandLineOptionTypeBoolean,
		showInSimplifiedHelpView: true,
		Category:                 diagnostics.Emit,
		Description:              diagnostics.Disable_emitting_files_from_a_compilation,
		transpileOptionValue:     core.TSUnknown,
		DefaultValueDescription:  false,
	},
	{
		Name:                       "assumeChangesOnlyAffectDirectDependencies",
		Kind:                       CommandLineOptionTypeBoolean,
		AffectsSemanticDiagnostics: true,
		AffectsEmit:                true,
		AffectsBuildInfo:           true,
		Category:                   diagnostics.Watch_and_Build_Modes,
		Description:                diagnostics.Have_recompiles_in_projects_that_use_incremental_and_watch_mode_assume_that_changes_within_a_file_will_only_affect_files_directly_depending_on_it,
		DefaultValueDescription:    false,
	},
	{
		Name:                    "locale",
		Kind:                    CommandLineOptionTypeString,
		Category:                diagnostics.Command_line_Options,
		IsCommandLineOnly:       true,
		Description:             diagnostics.Set_the_language_of_the_messaging_from_TypeScript_This_does_not_affect_emit,
		DefaultValueDescription: diagnostics.Platform_specific,
	},
}

var commonOptionsWithBuild = []*CommandLineOption{
	//******* commandOptionsWithoutBuild *******

	// CommandLine only options
	{
		Name:                     "all",
		Kind:                     CommandLineOptionTypeBoolean,
		showInSimplifiedHelpView: true,
		Category:                 diagnostics.Command_line_Options,
		Description:              diagnostics.Show_all_compiler_options,
		DefaultValueDescription:  false,
	},
	{
		Name:                     "version",
		shortName:                "v",
		Kind:                     CommandLineOptionTypeBoolean,
		showInSimplifiedHelpView: true,
		Category:                 diagnostics.Command_line_Options,
		Description:              diagnostics.Print_the_compiler_s_version,
		DefaultValueDescription:  false,
	},
	{
		Name:                     "init",
		Kind:                     CommandLineOptionTypeBoolean,
		showInSimplifiedHelpView: true,
		Category:                 diagnostics.Command_line_Options,
		Description:              diagnostics.Initializes_a_TypeScript_project_and_creates_a_tsconfig_json_file,
		DefaultValueDescription:  false,
	},
	{
		Name:                     "project",
		shortName:                "p",
		Kind:                     CommandLineOptionTypeString,
		isFilePath:               true,
		showInSimplifiedHelpView: true,
		Category:                 diagnostics.Command_line_Options,
		Description:              diagnostics.Compile_the_project_given_the_path_to_its_configuration_file_or_to_a_folder_with_a_tsconfig_json,
	},
	{
		Name:                     "showConfig",
		Kind:                     CommandLineOptionTypeBoolean,
		showInSimplifiedHelpView: true,
		Category:                 diagnostics.Command_line_Options,
		IsCommandLineOnly:        true,
		Description:              diagnostics.Print_the_final_configuration_instead_of_building,
		DefaultValueDescription:  false,
	},
	{
		Name:                    "listFilesOnly",
		Kind:                    CommandLineOptionTypeBoolean,
		Category:                diagnostics.Command_line_Options,
		IsCommandLineOnly:       true,
		Description:             diagnostics.Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing,
		DefaultValueDescription: false,
	},

	// Basic
	// targetOptionDeclaration,
	{
		Name:                     "target",
		shortName:                "t",
		Kind:                     CommandLineOptionTypeEnum, // targetOptionMap
		AffectsSourceFile:        true,
		AffectsModuleResolution:  true,
		AffectsEmit:              true,
		AffectsBuildInfo:         true,
		showInSimplifiedHelpView: true,
		Category:                 diagnostics.Language_and_Environment,
		Description:              diagnostics.Set_the_JavaScript_language_version_for_emitted_JavaScript_and_include_compatible_library_declarations,
		DefaultValueDescription:  core.ScriptTargetES5,
	},

	// moduleOptionDeclaration,
	{
		Name:                     "module",
		shortName:                "m",
		Kind:                     CommandLineOptionTypeEnum, // moduleOptionMap
		AffectsModuleResolution:  true,
		AffectsEmit:              true,
		AffectsBuildInfo:         true,
		showInSimplifiedHelpView: true,
		Category:                 diagnostics.Modules,
		Description:              diagnostics.Specify_what_module_code_is_generated,
		DefaultValueDescription:  core.TSUnknown,
	},
	{
		Name: "lib",
		Kind: CommandLineOptionTypeList,
		// elements: &CommandLineOption{
		// 	name:                    "lib",
		// 	kind:                   CommandLineOptionTypeEnum, // libMap,
		// 	defaultValueDescription: core.TSUnknown,
		// },
		AffectsProgramStructure:  true,
		showInSimplifiedHelpView: true,
		Category:                 diagnostics.Language_and_Environment,
		Description:              diagnostics.Specify_a_set_of_bundled_library_declaration_files_that_describe_the_target_runtime_environment,
		transpileOptionValue:     core.TSUnknown,
	},
	{
		Name:                     "allowJs",
		Kind:                     CommandLineOptionTypeBoolean,
		allowJsFlag:              true,
		AffectsBuildInfo:         true,
		showInSimplifiedHelpView: true,
		Category:                 diagnostics.JavaScript_Support,
		Description:              diagnostics.Allow_JavaScript_files_to_be_a_part_of_your_program_Use_the_checkJS_option_to_get_errors_from_these_files,
		DefaultValueDescription:  false,
	},
	{
		Name:                       "checkJs",
		Kind:                       CommandLineOptionTypeBoolean,
		AffectsModuleResolution:    true,
		AffectsSemanticDiagnostics: true,
		AffectsBuildInfo:           true,
		showInSimplifiedHelpView:   true,
		Category:                   diagnostics.JavaScript_Support,
		Description:                diagnostics.Enable_error_reporting_in_type_checked_JavaScript_files,
		DefaultValueDescription:    false,
	},
	{
		Name:                    "jsx",
		Kind:                    CommandLineOptionTypeEnum, // jsxOptionMap,
		AffectsSourceFile:       true,
		AffectsEmit:             true,
		AffectsBuildInfo:        true,
		AffectsModuleResolution: true,
		// The checker emits an error when it sees JSX but this option is not set in compilerOptions.
		// This is effectively a semantic error, so mark this option as affecting semantic diagnostics
		// so we know to refresh errors when this option is changed.
		AffectsSemanticDiagnostics: true,
		showInSimplifiedHelpView:   true,
		Category:                   diagnostics.Language_and_Environment,
		Description:                diagnostics.Specify_what_JSX_code_is_generated,
		DefaultValueDescription:    core.TSUnknown,
	},
	{
		Name:                     "outFile",
		Kind:                     CommandLineOptionTypeString,
		AffectsEmit:              true,
		AffectsBuildInfo:         true,
		AffectsDeclarationPath:   true,
		isFilePath:               true,
		showInSimplifiedHelpView: true,
		Category:                 diagnostics.Emit,
		Description:              diagnostics.Specify_a_file_that_bundles_all_outputs_into_one_JavaScript_file_If_declaration_is_true_also_designates_a_file_that_bundles_all_d_ts_output,
		transpileOptionValue:     core.TSUnknown,
	},
	{
		Name:                     "outDir",
		Kind:                     CommandLineOptionTypeString,
		AffectsEmit:              true,
		AffectsBuildInfo:         true,
		AffectsDeclarationPath:   true,
		isFilePath:               true,
		showInSimplifiedHelpView: true,
		Category:                 diagnostics.Emit,
		Description:              diagnostics.Specify_an_output_folder_for_all_emitted_files,
	},
	{
		Name:                    "rootDir",
		Kind:                    CommandLineOptionTypeString,
		AffectsEmit:             true,
		AffectsBuildInfo:        true,
		AffectsDeclarationPath:  true,
		isFilePath:              true,
		Category:                diagnostics.Modules,
		Description:             diagnostics.Specify_the_root_folder_within_your_source_files,
		DefaultValueDescription: diagnostics.Computed_from_the_list_of_input_files,
	},
	{
		Name: "composite",
		Kind: CommandLineOptionTypeBoolean,
		// Not setting affectsEmit because we calculate this flag might not affect full emit
		AffectsBuildInfo:        true,
		IsTSConfigOnly:          true,
		Category:                diagnostics.Projects,
		transpileOptionValue:    core.TSUnknown,
		DefaultValueDescription: false,
		Description:             diagnostics.Enable_constraints_that_allow_a_TypeScript_project_to_be_used_with_project_references,
	},
	{
		Name:                    "tsBuildInfoFile",
		Kind:                    CommandLineOptionTypeString,
		AffectsEmit:             true,
		AffectsBuildInfo:        true,
		isFilePath:              true,
		Category:                diagnostics.Projects,
		transpileOptionValue:    core.TSUnknown,
		DefaultValueDescription: ".tsbuildinfo",
		Description:             diagnostics.Specify_the_path_to_tsbuildinfo_incremental_compilation_file,
	},
	{
		Name:                     "removeComments",
		Kind:                     CommandLineOptionTypeBoolean,
		AffectsEmit:              true,
		AffectsBuildInfo:         true,
		showInSimplifiedHelpView: true,
		Category:                 diagnostics.Emit,
		DefaultValueDescription:  false,
		Description:              diagnostics.Disable_emitting_comments,
	},
	{
		Name:                    "importHelpers",
		Kind:                    CommandLineOptionTypeBoolean,
		AffectsEmit:             true,
		AffectsBuildInfo:        true,
		AffectsSourceFile:       true,
		Category:                diagnostics.Emit,
		Description:             diagnostics.Allow_importing_helper_functions_from_tslib_once_per_project_instead_of_including_them_per_file,
		DefaultValueDescription: false,
	},
	{
		Name:                    "downlevelIteration",
		Kind:                    CommandLineOptionTypeBoolean,
		AffectsEmit:             true,
		AffectsBuildInfo:        true,
		Category:                diagnostics.Emit,
		Description:             diagnostics.Emit_more_compliant_but_verbose_and_less_performant_JavaScript_for_iteration,
		DefaultValueDescription: false,
	},
	{
		Name:                    "isolatedModules",
		Kind:                    CommandLineOptionTypeBoolean,
		Category:                diagnostics.Interop_Constraints,
		Description:             diagnostics.Ensure_that_each_file_can_be_safely_transpiled_without_relying_on_other_imports,
		transpileOptionValue:    core.TSTrue,
		DefaultValueDescription: false,
	},
	{
		Name:                       "verbatimModuleSyntax",
		Kind:                       CommandLineOptionTypeBoolean,
		AffectsEmit:                true,
		AffectsSemanticDiagnostics: true,
		AffectsBuildInfo:           true,
		Category:                   diagnostics.Interop_Constraints,
		Description:                diagnostics.Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_in_the_output_file_s_format_based_on_the_module_setting,
		DefaultValueDescription:    false,
	},
	{
		Name:                       "isolatedDeclarations",
		Kind:                       CommandLineOptionTypeBoolean,
		Category:                   diagnostics.Interop_Constraints,
		Description:                diagnostics.Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files,
		DefaultValueDescription:    false,
		AffectsBuildInfo:           true,
		AffectsSemanticDiagnostics: true,
	},

	// Strict Type Checks
	{
		Name: "strict",
		Kind: CommandLineOptionTypeBoolean,
		// Though this affects semantic diagnostics, affectsSemanticDiagnostics is not set here
		// The value of each strictFlag depends on own strictFlag value or this and never accessed directly.
		// But we need to store `strict` in builf info, even though it won't be examined directly, so that the
		// flags it controls (e.g. `strictNullChecks`) will be retrieved correctly
		AffectsBuildInfo:         true,
		showInSimplifiedHelpView: true,
		Category:                 diagnostics.Type_Checking,
		Description:              diagnostics.Enable_all_strict_type_checking_options,
		DefaultValueDescription:  false,
	},
	{
		Name:                       "noImplicitAny",
		Kind:                       CommandLineOptionTypeBoolean,
		AffectsSemanticDiagnostics: true,
		AffectsBuildInfo:           true,
		strictFlag:                 true,
		Category:                   diagnostics.Type_Checking,
		Description:                diagnostics.Enable_error_reporting_for_expressions_and_declarations_with_an_implied_any_type,
		DefaultValueDescription:    diagnostics.X_false_unless_strict_is_set,
	},
	{
		Name:                       "strictNullChecks",
		Kind:                       CommandLineOptionTypeBoolean,
		AffectsSemanticDiagnostics: true,
		AffectsBuildInfo:           true,
		strictFlag:                 true,
		Category:                   diagnostics.Type_Checking,
		Description:                diagnostics.When_type_checking_take_into_account_null_and_undefined,
		DefaultValueDescription:    diagnostics.X_false_unless_strict_is_set,
	},
	{
		Name:                       "strictFunctionTypes",
		Kind:                       CommandLineOptionTypeBoolean,
		AffectsSemanticDiagnostics: true,
		AffectsBuildInfo:           true,
		strictFlag:                 true,
		Category:                   diagnostics.Type_Checking,
		Description:                diagnostics.When_assigning_functions_check_to_ensure_parameters_and_the_return_values_are_subtype_compatible,
		DefaultValueDescription:    diagnostics.X_false_unless_strict_is_set,
	},
	{
		Name:                       "strictBindCallApply",
		Kind:                       CommandLineOptionTypeBoolean,
		AffectsSemanticDiagnostics: true,
		AffectsBuildInfo:           true,
		strictFlag:                 true,
		Category:                   diagnostics.Type_Checking,
		Description:                diagnostics.Check_that_the_arguments_for_bind_call_and_apply_methods_match_the_original_function,
		DefaultValueDescription:    diagnostics.X_false_unless_strict_is_set,
	},
	{
		Name:                       "strictPropertyInitialization",
		Kind:                       CommandLineOptionTypeBoolean,
		AffectsSemanticDiagnostics: true,
		AffectsBuildInfo:           true,
		strictFlag:                 true,
		Category:                   diagnostics.Type_Checking,
		Description:                diagnostics.Check_for_class_properties_that_are_declared_but_not_set_in_the_constructor,
		DefaultValueDescription:    diagnostics.X_false_unless_strict_is_set,
	},
	{
		Name:                       "strictBuiltinIteratorReturn",
		Kind:                       CommandLineOptionTypeBoolean,
		AffectsSemanticDiagnostics: true,
		AffectsBuildInfo:           true,
		strictFlag:                 true,
		Category:                   diagnostics.Type_Checking,
		Description:                diagnostics.Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any,
		DefaultValueDescription:    diagnostics.X_false_unless_strict_is_set,
	},
	{
		Name:                       "noImplicitThis",
		Kind:                       CommandLineOptionTypeBoolean,
		AffectsSemanticDiagnostics: true,
		AffectsBuildInfo:           true,
		strictFlag:                 true,
		Category:                   diagnostics.Type_Checking,
		Description:                diagnostics.Enable_error_reporting_when_this_is_given_the_type_any,
		DefaultValueDescription:    diagnostics.X_false_unless_strict_is_set,
	},
	{
		Name:                       "useUnknownInCatchVariables",
		Kind:                       CommandLineOptionTypeBoolean,
		AffectsSemanticDiagnostics: true,
		AffectsBuildInfo:           true,
		strictFlag:                 true,
		Category:                   diagnostics.Type_Checking,
		Description:                diagnostics.Default_catch_clause_variables_as_unknown_instead_of_any,
		DefaultValueDescription:    diagnostics.X_false_unless_strict_is_set,
	},
	{
		Name:                    "alwaysStrict",
		Kind:                    CommandLineOptionTypeBoolean,
		AffectsSourceFile:       true,
		AffectsEmit:             true,
		AffectsBuildInfo:        true,
		strictFlag:              true,
		Category:                diagnostics.Type_Checking,
		Description:             diagnostics.Ensure_use_strict_is_always_emitted,
		DefaultValueDescription: diagnostics.X_false_unless_strict_is_set,
	},

	// Additional Checks
	{
		Name:                       "noUnusedLocals",
		Kind:                       CommandLineOptionTypeBoolean,
		AffectsSemanticDiagnostics: true,
		AffectsBuildInfo:           true,
		Category:                   diagnostics.Type_Checking,
		Description:                diagnostics.Enable_error_reporting_when_local_variables_aren_t_read,
		DefaultValueDescription:    false,
	},
	{
		Name:                       "noUnusedParameters",
		Kind:                       CommandLineOptionTypeBoolean,
		AffectsSemanticDiagnostics: true,
		AffectsBuildInfo:           true,
		Category:                   diagnostics.Type_Checking,
		Description:                diagnostics.Raise_an_error_when_a_function_parameter_isn_t_read,
		DefaultValueDescription:    false,
	},
	{
		Name:                       "exactOptionalPropertyTypes",
		Kind:                       CommandLineOptionTypeBoolean,
		AffectsSemanticDiagnostics: true,
		AffectsBuildInfo:           true,
		Category:                   diagnostics.Type_Checking,
		Description:                diagnostics.Interpret_optional_property_types_as_written_rather_than_adding_undefined,
		DefaultValueDescription:    false,
	},
	{
		Name:                       "noImplicitReturns",
		Kind:                       CommandLineOptionTypeBoolean,
		AffectsSemanticDiagnostics: true,
		AffectsBuildInfo:           true,
		Category:                   diagnostics.Type_Checking,
		Description:                diagnostics.Enable_error_reporting_for_codepaths_that_do_not_explicitly_return_in_a_function,
		DefaultValueDescription:    false,
	},
	{
		Name:                       "noFallthroughCasesInSwitch",
		Kind:                       CommandLineOptionTypeBoolean,
		AffectsBindDiagnostics:     true,
		AffectsSemanticDiagnostics: true,
		AffectsBuildInfo:           true,
		Category:                   diagnostics.Type_Checking,
		Description:                diagnostics.Enable_error_reporting_for_fallthrough_cases_in_switch_statements,
		DefaultValueDescription:    false,
	},
	{
		Name:                       "noUncheckedIndexedAccess",
		Kind:                       CommandLineOptionTypeBoolean,
		AffectsSemanticDiagnostics: true,
		AffectsBuildInfo:           true,
		Category:                   diagnostics.Type_Checking,
		Description:                diagnostics.Add_undefined_to_a_type_when_accessed_using_an_index,
		DefaultValueDescription:    false,
	},
	{
		Name:                       "noImplicitOverride",
		Kind:                       CommandLineOptionTypeBoolean,
		AffectsSemanticDiagnostics: true,
		AffectsBuildInfo:           true,
		Category:                   diagnostics.Type_Checking,
		Description:                diagnostics.Ensure_overriding_members_in_derived_classes_are_marked_with_an_override_modifier,
		DefaultValueDescription:    false,
	},
	{
		Name:                       "noPropertyAccessFromIndexSignature",
		Kind:                       CommandLineOptionTypeBoolean,
		AffectsSemanticDiagnostics: true,
		AffectsBuildInfo:           true,
		showInSimplifiedHelpView:   false,
		Category:                   diagnostics.Type_Checking,
		Description:                diagnostics.Enforces_using_indexed_accessors_for_keys_declared_using_an_indexed_type,
		DefaultValueDescription:    false,
	},

	// Module Resolution
	{
		Name: "moduleResolution",
		Kind: CommandLineOptionTypeEnum,
		//    new Map(Object.entries({
		//         // N.B. The first entry specifies the value shown in `tsc --init`
		//         node10: ModuleResolutionKind.Node10,
		//         node: ModuleResolutionKind.Node10,
		//         classic: ModuleResolutionKind.Classic,
		//         node16: ModuleResolutionKind.Node16,
		//         nodenext: ModuleResolutionKind.NodeNext,
		//         bundler: ModuleResolutionKind.Bundler,
		//     })),
		AffectsModuleResolution: true,
		Category:                diagnostics.Modules,
		Description:             diagnostics.Specify_how_TypeScript_looks_up_a_file_from_a_given_module_specifier,
		DefaultValueDescription: diagnostics.X_module_AMD_or_UMD_or_System_or_ES6_then_Classic_Otherwise_Node,
	},
	{
		Name:                    "baseUrl",
		Kind:                    CommandLineOptionTypeString,
		AffectsModuleResolution: true,
		isFilePath:              true,
		Category:                diagnostics.Modules,
		Description:             diagnostics.Specify_the_base_directory_to_resolve_non_relative_module_names,
	},
	{
		// this option can only be specified in tsconfig.json
		// use type = object to copy the value as-is
		Name:                               "paths",
		Kind:                               CommandLineOptionTypeObject,
		AffectsModuleResolution:            true,
		allowConfigDirTemplateSubstitution: true,
		IsTSConfigOnly:                     true,
		Category:                           diagnostics.Modules,
		Description:                        diagnostics.Specify_a_set_of_entries_that_re_map_imports_to_additional_lookup_locations,
		transpileOptionValue:               core.TSUnknown,
	},
	{
		// this option can only be specified in tsconfig.json
		// use type = object to copy the value as-is
		Name:                               "rootDirs",
		Kind:                               CommandLineOptionTypeList,
		IsTSConfigOnly:                     true,
		AffectsModuleResolution:            true,
		allowConfigDirTemplateSubstitution: true,
		Category:                           diagnostics.Modules,
		Description:                        diagnostics.Allow_multiple_folders_to_be_treated_as_one_when_resolving_modules,
		transpileOptionValue:               core.TSUnknown,
		DefaultValueDescription:            diagnostics.Computed_from_the_list_of_input_files,
	},
	{
		Name:                               "typeRoots",
		Kind:                               CommandLineOptionTypeList,
		AffectsModuleResolution:            true,
		allowConfigDirTemplateSubstitution: true,
		Category:                           diagnostics.Modules,
		Description:                        diagnostics.Specify_multiple_folders_that_act_like_Slashnode_modules_Slash_types,
	},
	{
		Name:                     "types",
		Kind:                     CommandLineOptionTypeList,
		AffectsProgramStructure:  true,
		showInSimplifiedHelpView: true,
		Category:                 diagnostics.Modules,
		Description:              diagnostics.Specify_type_package_names_to_be_included_without_being_referenced_in_a_source_file,
		transpileOptionValue:     core.TSUnknown,
	},
	{
		Name:                       "allowSyntheticDefaultImports",
		Kind:                       CommandLineOptionTypeBoolean,
		AffectsSemanticDiagnostics: true,
		AffectsBuildInfo:           true,
		Category:                   diagnostics.Interop_Constraints,
		Description:                diagnostics.Allow_import_x_from_y_when_a_module_doesn_t_have_a_default_export,
		DefaultValueDescription:    diagnostics.X_module_system_or_esModuleInterop,
	},
	{
		Name:                       "esModuleInterop",
		Kind:                       CommandLineOptionTypeBoolean,
		AffectsSemanticDiagnostics: true,
		AffectsEmit:                true,
		AffectsBuildInfo:           true,
		showInSimplifiedHelpView:   true,
		Category:                   diagnostics.Interop_Constraints,
		Description:                diagnostics.Emit_additional_JavaScript_to_ease_support_for_importing_CommonJS_modules_This_enables_allowSyntheticDefaultImports_for_type_compatibility,
		DefaultValueDescription:    false,
	},
	{
		Name:                    "preserveSymlinks",
		Kind:                    CommandLineOptionTypeBoolean,
		Category:                diagnostics.Interop_Constraints,
		Description:             diagnostics.Disable_resolving_symlinks_to_their_realpath_This_correlates_to_the_same_flag_in_node,
		DefaultValueDescription: false,
	},
	{
		Name:                       "allowUmdGlobalAccess",
		Kind:                       CommandLineOptionTypeBoolean,
		AffectsSemanticDiagnostics: true,
		AffectsBuildInfo:           true,
		Category:                   diagnostics.Modules,
		Description:                diagnostics.Allow_accessing_UMD_globals_from_modules,
		DefaultValueDescription:    false,
	},
	{
		Name:                    "moduleSuffixes",
		Kind:                    CommandLineOptionTypeList,
		listPreserveFalsyValues: true,
		AffectsModuleResolution: true,
		Category:                diagnostics.Modules,
		Description:             diagnostics.List_of_file_name_suffixes_to_search_when_resolving_a_module,
	},
	{
		Name:                       "allowImportingTsExtensions",
		Kind:                       CommandLineOptionTypeBoolean,
		AffectsSemanticDiagnostics: true,
		AffectsBuildInfo:           true,
		Category:                   diagnostics.Modules,
		Description:                diagnostics.Allow_imports_to_include_TypeScript_file_extensions_Requires_moduleResolution_bundler_and_either_noEmit_or_emitDeclarationOnly_to_be_set,
		DefaultValueDescription:    false,
		transpileOptionValue:       core.TSUnknown,
	},
	{
		Name:                       "rewriteRelativeImportExtensions",
		Kind:                       CommandLineOptionTypeBoolean,
		AffectsSemanticDiagnostics: true,
		AffectsBuildInfo:           true,
		Category:                   diagnostics.Modules,
		// description: diagnostics.Rewrite_ts_tsx_mts_and_cts_file_extensions_in_relative_import_paths_to_their_JavaScript_equivalent_in_output_files,
		DefaultValueDescription: false,
	},
	{
		Name:                    "resolvePackageJsonExports",
		Kind:                    CommandLineOptionTypeBoolean,
		AffectsModuleResolution: true,
		Category:                diagnostics.Modules,
		Description:             diagnostics.Use_the_package_json_exports_field_when_resolving_package_imports,
		DefaultValueDescription: diagnostics.X_true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false,
	},
	{
		Name:                    "resolvePackageJsonImports",
		Kind:                    CommandLineOptionTypeBoolean,
		AffectsModuleResolution: true,
		Category:                diagnostics.Modules,
		Description:             diagnostics.Use_the_package_json_imports_field_when_resolving_imports,
		DefaultValueDescription: diagnostics.X_true_when_moduleResolution_is_node16_nodenext_or_bundler_otherwise_false,
	},
	{
		Name:                    "customConditions",
		Kind:                    CommandLineOptionTypeList,
		AffectsModuleResolution: true,
		Category:                diagnostics.Modules,
		Description:             diagnostics.Conditions_to_set_in_addition_to_the_resolver_specific_defaults_when_resolving_imports,
	},
	{
		Name:                       "noUncheckedSideEffectImports",
		Kind:                       CommandLineOptionTypeBoolean,
		AffectsSemanticDiagnostics: true,
		AffectsBuildInfo:           true,
		Category:                   diagnostics.Modules,
		Description:                diagnostics.Check_side_effect_imports,
		DefaultValueDescription:    false,
	},

	// Source Maps
	{
		Name:             "sourceRoot",
		Kind:             CommandLineOptionTypeString,
		AffectsEmit:      true,
		AffectsBuildInfo: true,
		Category:         diagnostics.Emit,
		Description:      diagnostics.Specify_the_root_path_for_debuggers_to_find_the_reference_source_code,
	},
	{
		Name:             "mapRoot",
		Kind:             CommandLineOptionTypeString,
		AffectsEmit:      true,
		AffectsBuildInfo: true,
		Category:         diagnostics.Emit,
		Description:      diagnostics.Specify_the_location_where_debugger_should_locate_map_files_instead_of_generated_locations,
	},
	{
		Name:                    "inlineSources",
		Kind:                    CommandLineOptionTypeBoolean,
		AffectsEmit:             true,
		AffectsBuildInfo:        true,
		Category:                diagnostics.Emit,
		Description:             diagnostics.Include_source_code_in_the_sourcemaps_inside_the_emitted_JavaScript,
		DefaultValueDescription: false,
	},

	// Experimental
	{
		Name:                       "experimentalDecorators",
		Kind:                       CommandLineOptionTypeBoolean,
		AffectsEmit:                true,
		AffectsSemanticDiagnostics: true,
		AffectsBuildInfo:           true,
		Category:                   diagnostics.Language_and_Environment,
		Description:                diagnostics.Enable_experimental_support_for_legacy_experimental_decorators,
		DefaultValueDescription:    false,
	},
	{
		Name:                       "emitDecoratorMetadata",
		Kind:                       CommandLineOptionTypeBoolean,
		AffectsSemanticDiagnostics: true,
		AffectsEmit:                true,
		AffectsBuildInfo:           true,
		Category:                   diagnostics.Language_and_Environment,
		Description:                diagnostics.Emit_design_type_metadata_for_decorated_declarations_in_source_files,
		DefaultValueDescription:    false,
	},

	// Advanced
	{
		Name:                    "jsxFactory",
		Kind:                    CommandLineOptionTypeString,
		Category:                diagnostics.Language_and_Environment,
		Description:             diagnostics.Specify_the_JSX_factory_function_used_when_targeting_React_JSX_emit_e_g_React_createElement_or_h,
		DefaultValueDescription: "`React.createElement`",
	},
	{
		Name:                    "jsxFragmentFactory",
		Kind:                    CommandLineOptionTypeString,
		Category:                diagnostics.Language_and_Environment,
		Description:             diagnostics.Specify_the_JSX_Fragment_reference_used_for_fragments_when_targeting_React_JSX_emit_e_g_React_Fragment_or_Fragment,
		DefaultValueDescription: "React.Fragment",
	},
	{
		Name:                       "jsxImportSource",
		Kind:                       CommandLineOptionTypeString,
		AffectsSemanticDiagnostics: true,
		AffectsEmit:                true,
		AffectsBuildInfo:           true,
		AffectsModuleResolution:    true,
		AffectsSourceFile:          true,
		Category:                   diagnostics.Language_and_Environment,
		Description:                diagnostics.Specify_module_specifier_used_to_import_the_JSX_factory_functions_when_using_jsx_Colon_react_jsx_Asterisk,
		DefaultValueDescription:    "react",
	},
	{
		Name:                    "resolveJsonModule",
		Kind:                    CommandLineOptionTypeBoolean,
		AffectsModuleResolution: true,
		Category:                diagnostics.Modules,
		Description:             diagnostics.Enable_importing_json_files,
		DefaultValueDescription: false,
	},
	{
		Name:                    "allowArbitraryExtensions",
		Kind:                    CommandLineOptionTypeBoolean,
		AffectsProgramStructure: true,
		Category:                diagnostics.Modules,
		Description:             diagnostics.Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present,
		DefaultValueDescription: false,
	},

	{
		Name:                   "out",
		Kind:                   CommandLineOptionTypeString,
		AffectsEmit:            true,
		AffectsBuildInfo:       true,
		AffectsDeclarationPath: true,
		isFilePath:             false, // This is intentionally broken to support compatibility with existing tsconfig files
		// for correct behaviour, please use outFile
		Category:             diagnostics.Backwards_Compatibility,
		transpileOptionValue: core.TSUnknown,
		Description:          diagnostics.Deprecated_setting_Use_outFile_instead,
	},
	{
		Name:                    "reactNamespace",
		Kind:                    CommandLineOptionTypeString,
		AffectsEmit:             true,
		AffectsBuildInfo:        true,
		Category:                diagnostics.Language_and_Environment,
		Description:             diagnostics.Specify_the_object_invoked_for_createElement_This_only_applies_when_targeting_react_JSX_emit,
		DefaultValueDescription: "`React`",
	},
	{
		Name: "skipDefaultLibCheck",
		Kind: CommandLineOptionTypeBoolean,
		// We need to store these to determine whether `lib` files need to be rechecked
		AffectsBuildInfo:        true,
		Category:                diagnostics.Completeness,
		Description:             diagnostics.Skip_type_checking_d_ts_files_that_are_included_with_TypeScript,
		DefaultValueDescription: false,
	},
	{
		Name:                    "charset",
		Kind:                    CommandLineOptionTypeString,
		Category:                diagnostics.Backwards_Compatibility,
		Description:             diagnostics.No_longer_supported_In_early_versions_manually_set_the_text_encoding_for_reading_files,
		DefaultValueDescription: "utf8",
	},
	{
		Name:                    "emitBOM",
		Kind:                    CommandLineOptionTypeBoolean,
		AffectsEmit:             true,
		AffectsBuildInfo:        true,
		Category:                diagnostics.Emit,
		Description:             diagnostics.Emit_a_UTF_8_Byte_Order_Mark_BOM_in_the_beginning_of_output_files,
		DefaultValueDescription: false,
	},
	{
		Name:                    "newLine",
		Kind:                    CommandLineOptionTypeEnum, // newLineOptionMap,
		AffectsEmit:             true,
		AffectsBuildInfo:        true,
		Category:                diagnostics.Emit,
		Description:             diagnostics.Set_the_newline_character_for_emitting_files,
		DefaultValueDescription: "lf",
	},
	{
		Name:                       "noErrorTruncation",
		Kind:                       CommandLineOptionTypeBoolean,
		AffectsSemanticDiagnostics: true,
		AffectsBuildInfo:           true,
		Category:                   diagnostics.Output_Formatting,
		Description:                diagnostics.Disable_truncating_types_in_error_messages,
		DefaultValueDescription:    false,
	},
	{
		Name:                    "noLib",
		Kind:                    CommandLineOptionTypeBoolean,
		Category:                diagnostics.Language_and_Environment,
		AffectsProgramStructure: true,
		Description:             diagnostics.Disable_including_any_library_files_including_the_default_lib_d_ts,
		// We are not returning a sourceFile for lib file when asked by the program,
		// so pass --noLib to avoid reporting a file not found error.
		transpileOptionValue:    core.TSTrue,
		DefaultValueDescription: false,
	},
	{
		Name:                    "noResolve",
		Kind:                    CommandLineOptionTypeBoolean,
		AffectsModuleResolution: true,
		Category:                diagnostics.Modules,
		Description:             diagnostics.Disallow_import_s_require_s_or_reference_s_from_expanding_the_number_of_files_TypeScript_should_add_to_a_project,
		// We are not doing a full typecheck, we are not resolving the whole context,
		// so pass --noResolve to avoid reporting missing file errors.
		transpileOptionValue:    core.TSTrue,
		DefaultValueDescription: false,
	},
	{
		Name:                    "stripInternal",
		Kind:                    CommandLineOptionTypeBoolean,
		AffectsEmit:             true,
		AffectsBuildInfo:        true,
		Category:                diagnostics.Emit,
		Description:             diagnostics.Disable_emitting_declarations_that_have_internal_in_their_JSDoc_comments,
		DefaultValueDescription: false,
	},
	{
		Name:                    "disableSizeLimit",
		Kind:                    CommandLineOptionTypeBoolean,
		AffectsProgramStructure: true,
		Category:                diagnostics.Editor_Support,
		Description:             diagnostics.Remove_the_20mb_cap_on_total_source_code_size_for_JavaScript_files_in_the_TypeScript_language_server,
		DefaultValueDescription: false,
	},
	{
		Name:                    "disableSourceOfProjectReferenceRedirect",
		Kind:                    CommandLineOptionTypeBoolean,
		IsTSConfigOnly:          true,
		Category:                diagnostics.Projects,
		Description:             diagnostics.Disable_preferring_source_files_instead_of_declaration_files_when_referencing_composite_projects,
		DefaultValueDescription: false,
	},
	{
		Name:                    "disableSolutionSearching",
		Kind:                    CommandLineOptionTypeBoolean,
		IsTSConfigOnly:          true,
		Category:                diagnostics.Projects,
		Description:             diagnostics.Opt_a_project_out_of_multi_project_reference_checking_when_editing,
		DefaultValueDescription: false,
	},
	{
		Name:                    "disableReferencedProjectLoad",
		Kind:                    CommandLineOptionTypeBoolean,
		IsTSConfigOnly:          true,
		Category:                diagnostics.Projects,
		Description:             diagnostics.Reduce_the_number_of_projects_loaded_automatically_by_TypeScript,
		DefaultValueDescription: false,
	},
	{
		Name:                       "noImplicitUseStrict",
		Kind:                       CommandLineOptionTypeBoolean,
		AffectsSemanticDiagnostics: true,
		AffectsBuildInfo:           true,
		Category:                   diagnostics.Backwards_Compatibility,
		Description:                diagnostics.Disable_adding_use_strict_directives_in_emitted_JavaScript_files,
		DefaultValueDescription:    false,
	},
	{
		Name:                    "noEmitHelpers",
		Kind:                    CommandLineOptionTypeBoolean,
		AffectsEmit:             true,
		AffectsBuildInfo:        true,
		Category:                diagnostics.Emit,
		Description:             diagnostics.Disable_generating_custom_helper_functions_like_extends_in_compiled_output,
		DefaultValueDescription: false,
	},
	{
		Name:                    "noEmitOnError",
		Kind:                    CommandLineOptionTypeBoolean,
		AffectsEmit:             true,
		AffectsBuildInfo:        true,
		Category:                diagnostics.Emit,
		transpileOptionValue:    core.TSUnknown,
		Description:             diagnostics.Disable_emitting_files_if_any_type_checking_errors_are_reported,
		DefaultValueDescription: false,
	},
	{
		Name:                    "preserveConstEnums",
		Kind:                    CommandLineOptionTypeBoolean,
		AffectsEmit:             true,
		AffectsBuildInfo:        true,
		Category:                diagnostics.Emit,
		Description:             diagnostics.Disable_erasing_const_enum_declarations_in_generated_code,
		DefaultValueDescription: false,
	},
	{
		Name:                   "declarationDir",
		Kind:                   CommandLineOptionTypeString,
		AffectsEmit:            true,
		AffectsBuildInfo:       true,
		AffectsDeclarationPath: true,
		isFilePath:             true,
		Category:               diagnostics.Emit,
		transpileOptionValue:   core.TSUnknown,
		Description:            diagnostics.Specify_the_output_directory_for_generated_declaration_files,
	},
	{
		Name: "skipLibCheck",
		Kind: CommandLineOptionTypeBoolean,
		// We need to store these to determine whether `lib` files need to be rechecked
		AffectsBuildInfo:        true,
		Category:                diagnostics.Completeness,
		Description:             diagnostics.Skip_type_checking_all_d_ts_files,
		DefaultValueDescription: false,
	},
	{
		Name:                       "allowUnusedLabels",
		Kind:                       CommandLineOptionTypeBoolean,
		AffectsBindDiagnostics:     true,
		AffectsSemanticDiagnostics: true,
		AffectsBuildInfo:           true,
		Category:                   diagnostics.Type_Checking,
		Description:                diagnostics.Disable_error_reporting_for_unused_labels,
		DefaultValueDescription:    core.TSUnknown,
	},
	{
		Name:                       "allowUnreachableCode",
		Kind:                       CommandLineOptionTypeBoolean,
		AffectsBindDiagnostics:     true,
		AffectsSemanticDiagnostics: true,
		AffectsBuildInfo:           true,
		Category:                   diagnostics.Type_Checking,
		Description:                diagnostics.Disable_error_reporting_for_unreachable_code,
		DefaultValueDescription:    core.TSUnknown,
	},
	{
		Name:                       "suppressExcessPropertyErrors",
		Kind:                       CommandLineOptionTypeBoolean,
		AffectsSemanticDiagnostics: true,
		AffectsBuildInfo:           true,
		Category:                   diagnostics.Backwards_Compatibility,
		Description:                diagnostics.Disable_reporting_of_excess_property_errors_during_the_creation_of_object_literals,
		DefaultValueDescription:    false,
	},
	{
		Name:                       "suppressImplicitAnyIndexErrors",
		Kind:                       CommandLineOptionTypeBoolean,
		AffectsSemanticDiagnostics: true,
		AffectsBuildInfo:           true,
		Category:                   diagnostics.Backwards_Compatibility,
		Description:                diagnostics.Suppress_noImplicitAny_errors_when_indexing_objects_that_lack_index_signatures,
		DefaultValueDescription:    false,
	},
	{
		Name:                    "forceConsistentCasingInFileNames",
		Kind:                    CommandLineOptionTypeBoolean,
		AffectsModuleResolution: true,
		Category:                diagnostics.Interop_Constraints,
		Description:             diagnostics.Ensure_that_casing_is_correct_in_imports,
		DefaultValueDescription: true,
	},
	{
		Name:                    "maxNodeModuleJsDepth",
		Kind:                    CommandLineOptionTypeNumber,
		AffectsModuleResolution: true,
		Category:                diagnostics.JavaScript_Support,
		Description:             diagnostics.Specify_the_maximum_folder_depth_used_for_checking_JavaScript_files_from_node_modules_Only_applicable_with_allowJs,
		DefaultValueDescription: 0,
	},
	{
		Name:                       "noStrictGenericChecks",
		Kind:                       CommandLineOptionTypeBoolean,
		AffectsSemanticDiagnostics: true,
		AffectsBuildInfo:           true,
		Category:                   diagnostics.Backwards_Compatibility,
		Description:                diagnostics.Disable_strict_checking_of_generic_signatures_in_function_types,
		DefaultValueDescription:    false,
	},
	{
		Name:                       "useDefineForClassFields",
		Kind:                       CommandLineOptionTypeBoolean,
		AffectsSemanticDiagnostics: true,
		AffectsEmit:                true,
		AffectsBuildInfo:           true,
		Category:                   diagnostics.Language_and_Environment,
		Description:                diagnostics.Emit_ECMAScript_standard_compliant_class_fields,
		DefaultValueDescription:    diagnostics.X_true_for_ES2022_and_above_including_ESNext,
	},
	{
		Name:                    "preserveValueImports",
		Kind:                    CommandLineOptionTypeBoolean,
		AffectsEmit:             true,
		AffectsBuildInfo:        true,
		Category:                diagnostics.Backwards_Compatibility,
		Description:             diagnostics.Preserve_unused_imported_values_in_the_JavaScript_output_that_would_otherwise_be_removed,
		DefaultValueDescription: false,
	},

	{
		Name:                    "keyofStringsOnly",
		Kind:                    CommandLineOptionTypeBoolean,
		Category:                diagnostics.Backwards_Compatibility,
		Description:             diagnostics.Make_keyof_only_return_strings_instead_of_string_numbers_or_symbols_Legacy_option,
		DefaultValueDescription: false,
	},
	{
		// A list of plugins to load in the language service
		Name:           "plugins",
		Kind:           CommandLineOptionTypeList,
		IsTSConfigOnly: true,
		Description:    diagnostics.Specify_a_list_of_language_service_plugins_to_include,
		Category:       diagnostics.Editor_Support,
	},
	{
		Name:                    "moduleDetection",
		Kind:                    CommandLineOptionTypeEnum,
		AffectsSourceFile:       true,
		AffectsModuleResolution: true,
		Description:             diagnostics.Control_what_method_is_used_to_detect_module_format_JS_files,
		Category:                diagnostics.Language_and_Environment,
		DefaultValueDescription: diagnostics.X_auto_Colon_Treat_files_with_imports_exports_import_meta_jsx_with_jsx_Colon_react_jsx_or_esm_format_with_module_Colon_node16_as_modules,
	},
	{
		Name:                    "ignoreDeprecations",
		Kind:                    CommandLineOptionTypeString,
		DefaultValueDescription: core.TSUnknown,
	},
}
